package com.atguigu.b_test;

import java.util.Scanner;

/*
    二分查找法算法 : 前提 -> 序列有序


    此案例的逻辑是正序 !!
 */
public class Test14 {
    public static void main(String[] args) {
        int[] arr = {1,2,3,4,5,6,7,8,9,10};

        //键盘录入
        System.out.println("请您输入你要查询的值 : ");
        int num = new Scanner(System.in).nextInt();

        //定义2个索引指向序列的开头和结尾
        int start = 0;
        int end = arr.length - 1;

        //针对找不到的情况 -> 立 flag
        boolean flag = false; //标记

        //循环判断 start 和 end 是否相遇
        while (start <= end){
            //求中间值
            int middle = (start + end) >> 1;

            //那mid位置的值和键盘录入的值进行比较
            if (num == arr[middle]){
                System.out.println("您要查询的值 " + num + " 在序列的 " + middle + " 索引位置 ! ");
                //修改标记
                flag = true;
                break;
            } else if (num > arr[middle]) {
                //要查找的元素在mid位置的右边 -> 动start
                start = middle + 1;
            } else/* if (num < arr[middle])*/ {
                //要查找的元素在mid位置的左边边 -> 动end
                end = middle - 1;
            }
        }

        //循环的外面去判读标记是否被改变
        if (!flag){ //flag == false --> false == false -> true
            System.out.println("您要查找的元素没有找到 !");
        }
    }
}
